;----------------------
;p13-sqr.asm
;安装中断7ch的中断例程，并计算word类型数据平方
;参数：ax
;返回： dx，ax中分别存放高16位和低16位
;----------------------
assume cs:code

code segment
    start:
        call copy_new_int7ch
        call set_new_int7ch
       
        mov ax,3456
        int 7ch
        
        mov ax,4c00h
        int 21h
    sqr:  
		mul ax
		iret  ;CPU执行int 7ch指令进入中断例程之前，标志寄存器、当前的CS和IP被压入栈
		      ;在执行完中断例程后，应该用iret 指令恢复int 7ch执行前的标志寄存器和CS、IP的
    sqr_end: nop                                            
    set_new_int7ch:
        mov ax,0
        mov es,ax
        
        mov word ptr es:[7ch*4], 200h
        mov word ptr es:[7ch*4+2], 0

        ret
    copy_new_int7ch:
        mov ax,cs
        mov ds,ax
        mov si,offset sqr					;设置ds:si指向源地址

        mov ax,0
        mov es,ax
        mov di,200h							;设置es:di指向目的地址
        
        mov cx,offset sqr_end -  sqr	;设置cx为传输长度
        cld									;设置传输方向为正
        rep movsb

        ret
        
code ends
end start